

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>

void swap(char *string);
char* decToBin(int dec);
int binToDec(char* binary);

int main(){
	int dec;
	char *a = NULL;

	scanf("%d", &dec);
	a = decToBin(dec);

	printf("decimal: %d, binary: %s\n", binToDec(a), a);

	return 0;
}

/*Converte de Decimal para Binario. Retorna uma string com este valor
Desaloque a memoria quando terminar de usar!!!!*/
char* decToBin(int dec){
	int i = 0;
	char a, b;
	char *binary = (char*) malloc(sizeof(char)*8);/*numeros com ate oito bits*/

	/*verifica a necessidade de fazer o complemento de 1*/
	if(dec >= 0){
		a = '0';
		b = '1';
	}/*fim if*/
	else{
		a = '1';
		b = '0';
		dec = dec*(-1);
	}/*fim else*/

	/*Convertendo para binario*/
	do{
		if(dec%2 == 0)
			binary[i++] = a;/*se dec for positivo, a='1'*/
		else
			binary[i++] = b;/*se dec for positivo b='0'*/
		dec = dec/2;
	
	}while(dec > 0);

	binary[i] = '\0';/*Caracter terminador de string*/
	swap(binary);/*inverte a string, pois o codigo no do while da o numero na forma inversa*/

	return binary;
}/*fim decToBin*/

/*Converte de Binario para Decimal. Retorna um inteiro com este valor*/
int binToDec(char* binary){
	int size = 0, dec = 0, i;
	char a;
	
	/*se comecar com 1 o numero eh positivo. Caso contrario eh negativo*/
	if(binary[0] == '1')
		a = '1';
	else
		a = '0';

	size = strlen(binary);
	
	/*Convertendo para Decimal*/
	for(i = 0; i < size; i++){
		if(binary[i] == a)
			dec = dec + (int) pow(2.0,(double)((size-1)-i));
	}/*fim for*/

	return a == '1'? dec : dec*(-1);
}/*fim binToDec*/

/*Inverte a string. Ex: abc -> cba*/
void swap(char *string){
	int size = 0, i;
	char aux;
	
	size = strlen(string);
	
	for(i = 0; i < size/2; i++){
		aux = string[i];
		string[i] = string[(size-1)-i];
		string[(size-1)-i] = aux;	
	}/*fim for*/
}/*fim swap*/
